package string;

import org.junit.Test;

/**
 * <P> @Author: ideaAdmin
 * <P> TODO: Class
 * <P> TODO:
 * <P> Date: 2022/3/20:10:23
 * <P> Description:
 */

public class StringAppendTest {
    /**
        * TODO: 体会执行效率:通过StringBuilder的append()的方式添加字符串的效率要远高于使用string的字符串拼接方式!
     *            1.StringBuilder的append()的方式:自始至终中只创建过一个StringBuilder的对象
                    使用String的字符串拼接方式:创建过多个StringBuilder和String的对象
                   2. 使用String的字符串拼接方式 内存中会创建较多的 StringBuilder 对象和String对象
                    内存占用更大 如果进行GC 花费时间更多
            优化：使用StringBuilder的构造器 对容量进行确定 减少扩容的次数 也会减少抛弃之前的StringBuilder次数
    **/
    @Test
    public  void main() {
        long l = System.currentTimeMillis();
       // m1(100000);//4783
        m2(100000);//5
        System.out.println(System.currentTimeMillis()-l);


    }

    public void m1(int highLevel){
        String str = "";
        for (int i = 0; i < highLevel; i++) {
            //每次循环都会创建一个StringBuilder 和 String 并把之前的String抛弃
            str = str + "a";
        }
    }

    public void m2(int highLevel){
        //只需要创建一个StringBuilder
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < highLevel; i++) {
          stringBuilder.append("a");
        }
    }
}
